查看原文
其他

《Flink 源码解析》—— 源码编译运行

zhisheng zhisheng 2021-05-26

更新一篇知识星球里面的源码分析文章,去年写的,周末自己录了个视频,大家看下效果好吗?如果好的话,后面补录发在知识星球里面的其他源码解析文章。

前言

之前自己本地 clone 了 Flink 的源码,编译过,然后 share 到了 GitHub 上去了,自己也写了一些源码的中文注释,并且 push 到了 GitHub 上去了。这几天阿里开源了宣传已久的 Blink,结果我那个分支不能够继续 pull 下新的代码,再加上自己对 Flink 研究了也有点时间了,所以打算将这两个东西对比着来看,这样可能会学到不少更多东西,因为 Blink 是另外一个分支,所以自己干脆再重新 fork 了一份,拉到本地来看源码。

fork

执行下面命令:

1git clone git@github.com:apache/flink.git

拉取的时候找个网络好点的地方,这样速度可能会更快点。

编译

因为自己想看下 Blink 分支的代码,所以需要切换到 blink 分支来,

1git checkout blink

这样你就到了 blink 分支了,接下来我们将 blink 源码编译一下,执行如下命令:

1mvn clean install -Dmaven.test.skip=true -Dhadoop.version=2.7.6 -Dmaven.javadoc.skip=true -Dcheckstyle.skip=true

maven 编译的时候跳过测试代码、javadoc 和代码风格检查,这样可以减少不少时间。

注意:你的 maven 的 settings.xml 文件的 mirror 添加下面这个:(这样下载依赖才能飞起来)

1<mirror>
2  <id>nexus-aliyun</id>
3  <mirrorOf>*,!jeecg,!jeecg-snapshots,!mapr-releases</mirrorOf>
4  <name>Nexus aliyun</name>
5  <url>http://maven.aliyun.com/nexus/content/groups/public</url>
6</mirror>
7
8<mirror>
9  <id>mapr-public</id>
10  <mirrorOf>mapr-releases</mirrorOf>
11  <name>mapr-releases</name>
12  <url>https://maven.aliyun.com/repository/mapr-public</url>
13</mirror>

执行完这个命令后,然后呢,你可以掏出手机,打开微信,搜索下微信号:zhisheng_tian , 然后点击一波添加好友,欢迎来探讨技术。

等了一波时间之后,你可能会遇到这个问题(看到不少童鞋都遇到这个问题,之前编译 Flink 的时候也遇到过):

1[ERROR] Failed to execute goal on project flink-mapr-fs: Could not resolve dependencies for project com.alibaba.blink:flink-mapr-fs:jar:1.5.1Failure to find com.mapr.hadoop:maprfs:jar:5.2.1-mapr in http://maven.aliyun.com/nexus/content/groups/public was cached in the local repository, resolution will not be reattempted until the update interval of nexus-aliyun has elapsed or updates are forced -> [Help 1]

如果你试了两遍都没编译通过,那么我这里就教大家一种方法(执行完编译命令后啥也没动就 OK 的请跳过,谁叫你运气这么好呢):

在 flink-filesystems 中把 flink-mapr-fs module 给注释掉。

上图这是我给大家的忠告,特别管用。

再次执行命令编译起来就没有错误了,如果你还有其他的错误,我猜估计还是网络的问题,导致一些国外的 maven 依赖下载不下来或者不完整,导致的错误,暴力的方法就是和我一样,把这些下载不下来的依赖 module 注释掉,或者你可以像已经编译好的童鞋要下 maven 的 .m2 文件里面已经下载好了的依赖,然后复制粘贴到你的本地路径去,注意路径包名不要弄错了,这样一般可以解决所有的问题了,如果还有问题,我也无能为力了。

编译成功就长下图这样:

运行

然后我们的目录是长这样的:

标记的那个就是我们的可执行文件,就跟我们在 Flink 官网下载的一样,我们可以将它运行起来看下效果。

我把它移到了 /usr/local/blink-1.5.1 下了,个人习惯,喜欢把一些安装的软件安装在 /usr/local/ 目录下面。

目录结构和我以前的安装介绍文章类似,就是多了 batch_conf 目录,和 conf 目录是一样的东西,不知道为啥要弄两个配置文件目录,问过负责的人,没理我,哈哈哈。

那么我们接下来就是运行下 Blink,进入到 bin 目录,执行可执行文件:

1./start-cluster.sh

windows 可以点击 start-cluster.bat 启动,这点对 windows 用户比较友好。

执行完后命令后,在浏览器里访问地址,http://localhost:8081/ , 出现下图这样就代表 Blink 成功启动了:

上图是开源版本的白色主题,骚气的黑色主题通过在 Flink 群里得知如何改之后,编译运行后的效果如下:

一次好奇的执行了多次上面启动命令,发现也能够正常的运行。

然后启动的日志是这样的:

说明已经启动了 9 个 Task Manager,然后看到我们页面的监控信息如下:

可以看到监控信息里面已经有 40 个可用的 slot,这是因为 Blink 默认的是一个 Task Manager 4 个 slot,我们总共启动了 10 个 Task Manager,所以才会有 40 个可用的 slot,注意:Flink 默认的配置是 1 个 Task Manager 只含有 1 个 slot,不过这个是可以自己分配的。

注意:开启了多个 Task Manager 后,要关闭的话,得执行同样次数的关闭命令:

1./stop-cluster.sh

中文源码分析

https://github.com/zhisheng17/flink

配套视频解析

视频录制过程难免说错,还请大家可以指教

相关

更多源码解析的文章和 Flink 资料请加知识星球!

总结

本篇文章是《Flink 源码解析》的第一篇,zhisheng 我带带大家一起如何 clone 项目源码,进行源码编译,然后运行编译后的可执行文件 blink。下篇文章会分析项目源码的结构组成。

相关文章

1、《从0到1学习Flink》—— Apache Flink 介绍

2、《从0到1学习Flink》—— Mac 上搭建 Flink 1.6.0 环境并构建运行简单程序入门

3、《从0到1学习Flink》—— Flink 配置文件详解

4、《从0到1学习Flink》—— Data Source 介绍

5、《从0到1学习Flink》—— 如何自定义 Data Source ?

6、《从0到1学习Flink》—— Data Sink 介绍

7、《从0到1学习Flink》—— 如何自定义 Data Sink ?

8、《从0到1学习Flink》—— Flink Data transformation(转换)

9、《从0到1学习Flink》—— 介绍 Flink 中的 Stream Windows

10、《从0到1学习Flink》—— Flink 中的几种 Time 详解

11、《从0到1学习Flink》—— Flink 读取 Kafka 数据写入到 ElasticSearch

12、《从0到1学习Flink》—— Flink 项目如何运行?

13、《从0到1学习Flink》—— Flink 读取 Kafka 数据写入到 Kafka

14、《从0到1学习Flink》—— Flink JobManager 高可用性配置

15、《从0到1学习Flink》—— Flink parallelism 和 Slot 介绍

16、《从0到1学习Flink》—— Flink 读取 Kafka 数据批量写入到 MySQL

17、《从0到1学习Flink》—— Flink 读取 Kafka 数据写入到 RabbitMQ

18、《从0到1学习Flink》—— 你上传的 jar 包藏到哪里去了

19、大数据“重磅炸弹”——实时计算框架 Flink

在星球更新的源码解析文章有:

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存